home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / games / spassion / source.lzh / SOURCE / FuncEnemy / ZAKO05.C < prev   
Text File  |  2000-03-20  |  3KB  |  133 lines

  1. /*
  2. #include <stdio.h>
  3. #include <iocslib.h>
  4. */
  5. /* ハッチから出てくる敵 */
  6. #include <xsp2lib.h>
  7. #include "../SPASSION.H"
  8. #include "../player.h"
  9. #include "../enemy.h"
  10. #include "../eshot.h"
  11. #include "../effect.h"
  12. #include "../priority.h"
  13. #include "../sound.h"
  14. #include "../entry.h"
  15. #include "../SUB.H"
  16. #ifndef NULL
  17. #define NULL ((void *) 0)
  18. #endif
  19.  
  20. #define P_X    (*((short *) (&player[0].lx)))    /*lxの上位ワード*/
  21. #define P_Y    (*((short *) (&player[0].ly)))    /*lyの上位ワード*/
  22.  
  23. #define PALET_MAIN    0x0500
  24.  
  25. short enemy_explode( ENEMY *ene );
  26. static short MoveEnemyZako05(ENEMY *);
  27. /*static void TiniEnemyZako05(ENEMY *);*/
  28.  
  29. #define PT_ST    0x20
  30. #define PT_END    0x20+7
  31.  
  32. /* 16x16キャラの当たり判定 */
  33. extern HIT_XY4    hit8_p;
  34. extern HIT_XY4    hit8_o;
  35. extern HIT_XY4    hit8_s;
  36.  
  37. /* InitEnemyZako00Hitと同じなのでいらない */
  38. void InitEnemyZako05Hit( void )
  39. {
  40. }
  41.  
  42. void InitEnemyZako05(ENEMY *ene)
  43. {
  44.     short    vy[2]={-1,1};
  45.     ene->info         = PALET_MAIN | PRIORITY_ZAKO;
  46.     ene->vx             = 0;
  47.     ene->vy             = vy[ene->arg] * 65536;
  48.     ene->hit_p[0]     = &hit8_p;ene->hit_p[1]=NULL;
  49.     ene->hit_o[0]     = &hit8_o;ene->hit_o[1]=NULL;
  50.     ene->hit_s[0]     = &hit8_s;ene->hit_s[1]=NULL;
  51.     ene->hp             = 1;
  52.     ene->no_dead     = 0;
  53.     ene->func_enemy_move = MoveEnemyZako05;
  54. /*    ene->func_enemy_tini = TiniEnemyZako05;*/
  55.  
  56. /*    entry_counter_stop = !0;*/        /* エントリーカウンター停止 */
  57. }
  58.  
  59.  
  60. static short MoveEnemyZako05( ENEMY *ene )
  61. {
  62.     unsigned char angle;
  63.     short pt_st[2] ={ PT_ST, PT_ST+0x10};
  64.     short pt_end[2]={PT_END,PT_END+0x10};
  65.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  66.     ene->x = ((ene->lx += ene->vx) >> 16)-8;    /*-8は表示位置をずらすため*/
  67.     ene->y = ((ene->ly += ene->vy) >> 16)-8;
  68.  
  69.     switch (ene->state){
  70.     case 0:
  71.         ene->pt = obj_zako+pt_st[ene->arg]+(ene->anim_count++)/4;
  72.         if( ene->pt > obj_zako+pt_end[ene->arg] ){
  73.             ene->pt = obj_zako+pt_st[ene->arg];
  74.             ene->anim_count=0;
  75.         }
  76.         ene->vx=-map_vx;
  77.         /* 水平移動に移る */
  78.         if( ene->count++ > 64 ){
  79.             switch ( level ){
  80.             case EASY:
  81.                 break;
  82.             case NOMAL:
  83.                 MakeEShot(ESHOT_ENG02, ENE_X, ENE_Y, 5, calc_direction( ENE_X, ENE_Y, P_X+CENTER_X, P_Y ), 4,0,ene);
  84.                 SetSE(SE_ESHOT_ENRG);    /* 敵ショット音 */
  85.                 break;
  86.             case HARD:
  87.                 angle=calc_direction( ENE_X, ENE_Y, P_X+CENTER_X, P_Y );
  88.                 MakeEShot(ESHOT_ENG02, ENE_X, ENE_Y, 5, (angle-12)&255, 4,0,ene);
  89.                 MakeEShot(ESHOT_ENG02, ENE_X, ENE_Y, 5, (angle+12)&255, 4,0,ene);
  90.                 SetSE(SE_ESHOT_ENRG);    /* 敵ショット音 */
  91.                 break;
  92.             }
  93.             if( ENE_X > 128 )
  94.                 ene->vx=-2*65536;
  95.             else{
  96.                 ene->vx=2*65536;
  97.                 ene->info = PALET_MAIN | PRIORITY_ZAKO | 0x4000;
  98.             }
  99.             ene->vy=0;
  100.             ene->state++;
  101.             ene->count=0;
  102.         }
  103.         break;
  104.     case 1:
  105.         ene->pt = obj_zako+pt_st[ene->arg]+8+(ene->anim_count++)/4;
  106.         if( ene->pt > obj_zako+pt_end[ene->arg]+8 ){
  107.             ene->pt = obj_zako+pt_st[ene->arg]+8;
  108.             ene->anim_count=0;
  109.         }
  110.         /* 画面外に出たら消去 */
  111.         if( ENE_X < 16 - 8 || ENE_X > 255 + 24 )
  112.             return (0);
  113.     }
  114.  
  115.     /* ダメージを受けた時の処理 */
  116.     if(ene->damage){
  117.         MakeEffect(EFFECT_EXPLMINI, 0, ene->x, ene->y);
  118.         SetSE(SE_EXPL_S);    /* 爆発音 */
  119.         ene->player->score += 1;
  120.         return (0);        /* 消去 */
  121.     }
  122.  
  123.     xsp_set_st(ene);
  124.  
  125.     return(1);
  126. }
  127.  
  128. /*
  129. static void TiniEnemyZako05(ENEMY * p)
  130. {
  131. }
  132. */
  133.